A snapshot of data is a record that reflects the state of the data at a particular point in time. Snapshots can be used for a variety purposes, including data archiving, recovery after a hardware failure or software error, remote mirroring, report generation and decision making. As a particular example, a snapshot taken prior to the occurrence of data corruption resulting from a software error may be used to return the data to an uncorrupted state.
A consistent snapshot at time t records the results of all updates to the data before time t and does not record any results of the updates after time t. For example, for replicated data, a snapshot is consistent when the recorded replicas of the data are identical; the snapshot is inconsistent if an update has occurred to a replica of the data and not to another replica, so that the recorded replicas are no longer identical. For distributed data, a snapshot is consistent when it reflects the state of the data across all locations at the same point in time; a snapshot is inconsistent if it records a first update after time t to data in a first location but does not record a second update before time t to data in a second location. It is important to ensure that a snapshot is consistent. Otherwise, the snapshot may not be useful for its intended purpose. Typically, this means that no updates to the data can occur while the snapshot is being taken. Due to communication delays and clock skews, taking a consistent snapshot in a distributed system typically requires the suspension or alteration of other activities and takes a considerable amount of time. Thus, taking snapshots in a distributed system can significantly interfere with the performance of the system, particularly if frequent snapshots are desired.
Therefore, what is needed are improved techniques for taking snapshots in distributed systems. It is toward this end that the present invention is directed.